package it.unisalento.appsalento.activity.fragment;

import it.unisalento.R;
import it.unisalento.appsalento.Constants.Constants;
import it.unisalento.appsalento.activity.App;
import it.unisalento.appsalento.activity.MainActivity;
import it.unisalento.appsalento.adapter.AppelliDettaglioEsameAdapter;
import it.unisalento.appsalento.adapter.AppelloAdapter;
import it.unisalento.appsalento.model.Appello;
import it.unisalento.appsalento.model.Esame;

import java.util.ArrayList;

import android.app.Dialog;
import android.app.Fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class DettaglioEsameFragment extends Fragment {
	private TextView mCodice;
	private TextView mNome;
	private TextView mCfu;
	private TextView mAnnoCorso;
	private TextView mTipo;
	private TextView mSuperamento;
	private ImageView mStato;
	private TextView mListaAppelliLbl;
	private ListView mListaAppelli;
	private ArrayList<Appello> appelli = new ArrayList<Appello>();
	private Esame esame;
	private AppelliDettaglioEsameAdapter adapter;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		View rootView = inflater.inflate(R.layout.fragment_dettaglio_esame,container, false);

		mCodice = (TextView) rootView.findViewById(R.id.dettaglio_esame_codice);
		mNome = (TextView) rootView.findViewById(R.id.dettaglio_esame_nome);
		mCfu = (TextView) rootView.findViewById(R.id.dettaglio_esame_cfu);
		mAnnoCorso = (TextView) rootView.findViewById(R.id.dettaglio_esame_anno_corso);
		mTipo = (TextView) rootView.findViewById(R.id.dettaglio_esame_tipo);
		mSuperamento = (TextView) rootView.findViewById(R.id.dettaglio_esame_superamento);
		mStato = (ImageView) rootView.findViewById(R.id.dettaglio_esame_stato);
		mListaAppelliLbl = (TextView) rootView.findViewById(R.id.dettaglio_esame_lista_appelli_lbl);
		mListaAppelli = (ListView) rootView.findViewById(R.id.dettaglio_esame_lista_appelli);
		
		adapter = new AppelliDettaglioEsameAdapter(getActivity(), R.layout.row_appello_dettaglio_esame,
				appelli);
		mListaAppelli.setAdapter(adapter);
		
		esame = App.esameCorrente;
		
		if (esame!=null) {
			setView(esame);
		}
		
		LocalBroadcastManager
		.getInstance(getActivity().getApplicationContext())
		.registerReceiver(mDettaglioReceiver,
				new IntentFilter(Constants.ESAME_DETTAGLIO_EVENT));

		return rootView;
	}
	
	/**
	 * Imposta la view
	 * @param esame
	 */
	private void setView(Esame esame) {
		mCodice.setText(esame.getCodice());
		mNome.setText(esame.getNomeEsame());
		mCfu.setText(esame.getCfu());
		mAnnoCorso.setText(esame.getAnnoCorso());
		mTipo.setText(esame.getTipoEsame());

		/*int imageStatoResource = getActivity()
				.getApplicationContext()
				.getResources()
				.getIdentifier(
						esame.getStato(),
						"drawable",
						getActivity().getApplicationContext()
								.getPackageName());

		Drawable imageStato = getActivity()
				.getApplicationContext().getResources()
				.getDrawable(imageStatoResource);

		mStato.setImageDrawable(imageStato);*/
		
		appelli.clear();
		mListaAppelliLbl.setVisibility(View.GONE);
		mListaAppelli.setVisibility(View.GONE);
		
		if (!esame.getAaSuperamento().equals("")) {
			mSuperamento.setText("Superato il "+esame.getDataSuperamento()+" con la votazione "+esame.getVoto());
			mSuperamento.setVisibility(View.VISIBLE);
		} else {
			for (Appello appello : App.appelli) {
				if (appello.getCodiceEsame().equals(esame.getCodice())) {
					appelli.add(appello);
				}
			}
		}
		
		if (appelli.size()>0) {
			mListaAppelliLbl.setVisibility(View.VISIBLE);
			mListaAppelli.setVisibility(View.VISIBLE);
		}
		
		mListaAppelli.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) {
				Appello appello = (Appello) parent.getItemAtPosition(position);

				Dialog dialog = new Dialog(parent.getContext());
				dialog.setContentView(R.layout.row_dettaglio_appello);
				dialog.setTitle(appello.getIdAppello() +" - " + appello.getNomeEsame());
				AppelloAdapter appelloAdapter = new AppelloAdapter();
				appelloAdapter.setAppello(appello, dialog,(MainActivity)getActivity());

				dialog.setCancelable(true);
				dialog.show();
			}

		
		});
	}

	private BroadcastReceiver mDettaglioReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			String codiceEsame = intent
					.getStringExtra(Constants.ESAME_COD_EXTRA_NAME);

			for (Esame mEsame : App.listaEsami) {
				if (mEsame.getCodice().equals(codiceEsame)) {
					esame = mEsame;
					break;
				}
			}

			if (esame == null) {
				// TODO: gestire la casistica di errore
				return;
			}

			setView(esame);
		}
	};
}
